/*
 * Title: 并行程序模拟
 * Author: Yuanshun L
 * Created : 21-otc-2021
 */


#include<cstdio>
#include<iostream>
#include<vector>
#include<queue>
#include<string>
#include<cstring>
using namespace std;

#define MAXN 101



struct Cmd{
    int flag; // 0代表赋值，1代表打印，3代表lock，4代表unlock，5代表结束
    char var;
    int assgin;
    Cmd():flag(-1),var('\0'),assgin(-1){}
};

int get_flag(string& s){
    if(s.size()==1){
        return 0;
    }
    switch(s[0]){
       case 'p': return 1;
       case 'l': return 2;
       case 'u': return 3;
       case 'e': return 4;
       default: return -1; // 不合法命令
    }
}


int main(){

    freopen("data.in","r",stdin);
    freopen("data.out","w",stdout);

    int n,m;// 模拟次数，每次模拟的程序的数量

    cin >> n;
    while(n--){
        int var[26+1]; // 共享的变量,a,b,...,z
        int units[5]; // 每个语句执行时间
        int quantum; // 运行态周期


        cin >> m;
        for(int i=0;i<5;i++){
            cin >> units[i];
        }
        cin >> quantum;

        vector<Cmd> progs[MAXN];
        int steps[MAXN]; // 每个程序接下来要执行的语句的编号，从0开始
        string s;

        deque<int> wq; // 等待队列
        queue<int> bq; // 阻塞队列

        // 输入程序
        for(int i=1;i<=m;i++){
            for(;;){
                cin >> s;
                Cmd cmd;
                cmd.flag = get_flag(s);
                if(cmd.flag == 0){
                    cmd.var = s[0];
                    cin >> s; // 吃掉等号
                    cin >> cmd.assgin;
                }
                else if(cmd.flag == 1){
                    cin >> s;
                    cmd.var = s[0];
                }
                progs[i].push_back(cmd);
                // 该程序输入完毕
                if(cmd.flag==4) break;
            }
            wq.push_back(i);
        }
        memset(steps,0,sizeof(steps));
        memset(var,0,sizeof(var));

        int id,no; // 程序的id,id程序的no个命令
        int lock_id = 0; // 执行锁的id

        for(;;){
            if(wq.empty()) break;
            id = wq.front(); wq.pop_front();
            no = steps[id];
            Cmd cmd = progs[id][no];

            int q = quantum; // 运行时间
            int stat =0; // 0表示执行状态正常，1表示遇到了锁了，2表示程序终止
            while(q>0){
                if(cmd.flag==0){ // 赋值
                    var[cmd.var - 'a'] = cmd.assgin;
                }
                else if(cmd.flag==1){  // 打印
                    cout << id << ": " << var[cmd.var - 'a'] << endl;
                }
                else if(cmd.flag==2){ // 上锁
                    if(lock_id){
                        stat = 1; break;
                    }
                    else{
                        lock_id=id;
                    }
                }
                else if(cmd.flag==3){ // 解锁
                    lock_id=0;
                    // 将阻塞队列的头部移至等待队列首部
                    if(!bq.empty()){
                        wq.push_front(bq.front()); bq.pop();
                    }
                }
                else{
                    stat = 2; break;
                }
                no++; // 指向下一个命令
                q -= units[cmd.flag];
            }

            if(stat == 0){
                steps[id] = no;
                wq.push_back(id);
//                cout<<id<<"被加入到等待队列\n";
            }
            else if(stat == 1){
                // 加进阻塞队列
                steps[id] = no;
                bq.push(id);
//                cout<<id<<"被加入到阻塞队列\n";
            }
//            else{
//                cout<<id<<"程序结束了\n";
//            }
        }
    }
    return 0;
}
